Contents
Home
Parallel Port
DLL Tutorial
Inpout32














      
 
 
 
 
 
 






	

Logix4u                               http://www.logix4u.net/

A Tutorial on creating DLLs with VC++

          Visual basic is very fast and easy tool for developing applications with high degree of user friendliness , but it lacks some important functionalities like direct access to hardware, multythreading(Activex servers allows some type of multythreading !). The easy and effective solution for this problem is to write a DLL. But beginners experiance problems in understanding how to write a dll. .Here is a simple tutorial on writing DLLs with Visual C++. I assume that you know a little bit Visual Basic and ?C? programming.

What is Static linking and Dynamic linking ?

         The libraries can be linked to the executable in two ways . one is static linking and the other is dynamic linking. Static linking is the methode used to combine the library routines with the application. When bulding the program , the linker will search all the libraries for the unresolved functions called in the program and if found, it will copy the corresponding object code from the library and append it to the executable. The linker will keep searching until there are no more unresolved function references. This is the most common methode for linking libraries.This methode boasts of ease of implementation and speed but will generate bulky executables. In dynamic linking , the required functions are compliled and stored in a library with extension ?.DLL?. Unlike static linking, no object code is copied in to the executable from the libraries.Insted of that, the executable will keep the name of the DLL in which the required function resides. and when the executable is running , it will load the DLL and call the required functions from it. This methode yealds an executable with small footprint , but have to compromise on speed a little.



Example 1

Objetive

Create a Dynamically linkable library which can calculate and return the sum of two numbers passed to it.

Tools required

visual C++ 6 , Visual basic 6

Writing The DLL

Start VC++ IDE , select ?New? from File menu. Then select ?Win32 Dynamic - link library? from ?Projects? tab(picture-1). enter project name as ?example1? , then click OK button. Now you can see a dialog box with caption ?Win32 Dynamic - Link library - step 1 of 1? (picture-2).

         
                                                         Picture 1

                
                                                         Picture 2

Select ?a simple DLL project? and click Finish. Now open exaple1.cpp from ?fileview? (picture-3)               
                                                          Picture 3

add these lines in to example1.cpp

int _stdcall sum(int x , int y)
{
return x+y;
}


It is a simple function which returns the sum of numbers passed to it.

Now our function is ready. The next step is to create a ?.def? file which informs the linker to export our function.Select ?New? from ?File? menu and then select ?text File? from ?Files? tab.Give it a name ?example1.def?. Now you can see an empty file . Add these lines in to ?example1.def?

LIBRARY EXAMPLE1

EXPORTS
sum @1

Select ?Build example1.dll? from ?build? menu. The build process should complete without any errors. If any error occures , correct it and rebuild again. Oce the build process is completed successfuly , you can see ?example1.dll? in ?debug? directory.

Now we have successfuly built the Dll and it is the time to test it. For testing the DLL we have to write a small program in VB. Open a new project in Visual Basic. Place three text box and a command button like in picture 4.

                           
                                                         Picture 4

Copy the code given bellow , to the code window

Private Declare Function sum Lib "example1.dll" (ByVal x As Long, ByVal y As Long) As Long Private Sub Command1_Click()
Text3.Text = Str(sum(CInt(Text1.Text), CInt(Text2.Text)))
End Sub


copy example 1.dll to ?windows? or ?system? directory . Then run VB ,enter some values to text1 and text2 and click ?Calculate? button. If you can see the sum in text3, you have completed example1 successfuly ! cangratulations !.

Download the source code and project files for example1




Example 2

Objetive

Create a Dynamically linkable library which can calculate and return the sum of two numbers passed to it.

Tools required

visual C++ 6 , Visual basic 6

Writing The DLL

Create a new win32 DLL project in VC++ just like in the previous example. insert the statement given below before main

#include ?string.h?

Insert the following code after main

char* _stdcall to_upper(char *lowerstring)
{
_strupr(lowerstring);
return lowerstring;
}


Create a def file and insert the following code

LIBRARY example2

EXPORTS
to_upper          @1


Now save the project, build it and copy example2.dll to ?windows? or ?system? directory.

Create a new project in VB, place a text box and command button the form paste the following code to code window.

Private Declare Function to_upper Lib "example2.dll" (ByVal text As String) As String

Private Sub Command1_Click()

If (Text1.text) = "" Then
Exit Sub
End If

MsgBox to_upper(Text1.text)
End Sub


Run the program and enter some lower case characters in textbox.It should display a messagebox with same characters with case changed.

Download the source code and project files for example2




Example 3

Objetive

Create a DLL which can read/write data to parallel port

This DLL is a very useful for interfacing parallel/serial ports. Since Visual Basic does not have any facility to communicate with parallel port directly , programmers will have to write code for accessing parallel port in a DLL and should be called from VB. In this DLL , in this dll , accessing the device registers is done using functions _Inp() and _Outp(), which is declared in ?conio.h? . More details about these functions can be found at MSDN online .

We will export two functions from the DLL.One is for reading from a device register and the other is for writing to the device register. Let these functions be InPort() and OutPort(). InPort() will take one parameter ie; the address of the register to be read. and Outport will take two ie; the address of the register to which the data to be written and the data itself.

Note: to do this project , You need to have some knowledge in Parallel port interfacing.

Tools required

visual C++ 6 , Visual basic 6

Writing The DLL

Create a new win32 DLL project in VC++ like in the previous examples. insert the statement given below before main

#include ?conio.h?

Insert the following code after main

short _stdcall InPort(short portaddress)
{
return _inp(portaddress);
}

void _stdcall OutPort(short portaddress,short data)
{
_outp(portaddress,data);
}


create a .def file with name example3.def and insert the following code

LIBRARY example3

EXPORTS

InPort        @1
OutPort    @2


now save the project and build example3.dll.
for testing the dll , create a new project in visual basic.Create a form like in picture5.

                                 
                                                         Picture 5

Add the following code to code window

Private Declare Function InPort Lib "example3.dll" (ByVal portaddress As Integer) As Integer Private Declare Function OutPort Lib "example3.dll" (ByVal portaddress As Integer, ByVal data As Integer) As Integer

Private Sub Command1_Click()
OutPort 888, 10 'Val("&h" + Text2.Text), Val(Text1.Text)
End Sub

Private Sub Command2_Click()
Text3.Text = Str(InPort(Val("&h" + Text2.Text))
End Sub


Run the program and enter some value in text1. the n click ?Write it? button. Again click the ?Read it? button , now if text2 displays the number which you entered in text1 , your dll is working successfuly.

Download the source code and project files for example3


NOTE: This program will not work on Win NT , 2000 , XP systems. Use WIN95/98 for testing

How to use this dll with parallel port ?

This site website can be wiewed best in MSIE 4 or later, with 800 X 600 screen resolution